package model;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import commons.PersistibleXML;

import helpers.LoggerHelper;

public class Ghost implements Movable, Edible ,PersistibleXML{
	private State state;
	private LoggerHelper logger;
	private Tile eslabon;
	
	public Ghost (Tile eslabon, Strategy estrategia){
		this.state = new Hunter(this, estrategia);
		this.logger = new LoggerHelper("fantasma");
		this.eslabon = eslabon;
		this.eslabon.addComible(this);
	}
	
	public void pasaronSegundos(int segundos){
		this.state.pasaronSegundos(segundos);
	}

	public void setEstado(State state) {
		this.state = state;
		this.logger.log("Cambio de state a: " + state);
	}
	
	@Override
	public String toString() {
		return this.state.toString();
	}

	public State getEstado() {
		return this.state;
	}
	public void iniciaPowerPellet(){
		this.state.iniciaPowerPellet();
	}

	@Override
	public void move() {
		this.state.move();
		for(Edible c : this.eslabon.getComibles())
			c.esComidoPor(this);
	}

	@Override
	public Tile getEslabon() {
		return this.eslabon;
	}

	@Override
	public void esComidoPor(Movable movible) {
		//aca hay que hacer algo con el state...
		movible.eatGhost(this);		
	}

	@Override
	public void eatDot(Dot punto) {
		// Este no hace nada.. no come bolitas
	}

	@Override
	public void eatGhost(Ghost fantasma) {
		//no hace nada.. no come fantasmas
	}

	public void serComido(Pacman pacman) {
		// TODO algo con states aca
		state.esComidoPor(pacman);
		
	}

	@Override
	public void eatPacman(Pacman pacman) {
		//algo con states aca?
		pacman.serComido(this);		
	}

	public void setEslabon(Tile eslabon) {
		this.eslabon = eslabon;
		this.eslabon.addComible(this);
	}

	@Override
	public Element writeToXmlFormat(Document listFantasmas) {
		Element elemFantasma = listFantasmas.createElement("fantasma");
		elemFantasma.setAttribute("id", "?");
		elemFantasma.setAttribute("nodo", String.valueOf(eslabon.getId()));
		elemFantasma.setAttribute("fila", String.valueOf(this.eslabon.getFila()));
		elemFantasma.setAttribute("columna", String.valueOf(this.eslabon.getColumna()));
		elemFantasma.setAttribute("sentido", "");
		elemFantasma.setAttribute("personalidad", this.state.estrategia.getClass().getName());
		elemFantasma.setAttribute("state", this.state.getClass().getName());
		return elemFantasma;
	}
}
